文章摘要
加载中...|
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结 投诉

概述

Agent 系统的评估与传统软件测试不同,输出具有不确定性和多样性。本文将介绍 Agent 评估的维度、工具和实践。

Agent 评估维度

核心评估维度

text
┌─────────────────────────────────────────────────────────┐
│                   Agent 评估维度                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1. 准确性:回答是否正确,工具调用是否准确                   │
│  2. 相关性:是否回答了用户的问题                           │
│  3. 完整性:是否回答了所有部分                             │
│  4. 一致性:多次回答是否一致                               │
│  5. 有用性:是否真正解决了用户问题                         │
│  6. 效率:响应时间、Token 消耗                            │
│  7. 安全性:是否生成有害内容                               │
│  8. 鲁棒性:处理异常输入的能力                             │
│                                                         │
└─────────────────────────────────────────────────────────┘

评估指标

指标计算方法目标值
任务成功率成功数 / 总数>90%
平均轮次总轮次 / 总任务<5
平均响应时间总时间 / 请求数<3秒
工具调用准确率正确数 / 总数>95%

评估框架

LangSmith

python
# pip install langsmith
from langsmith import Client

client = Client()

# 创建数据集
dataset = client.create_dataset(
    name="agent-eval-dataset",
    description="Agent 评估数据集"
)

# 添加示例
examples = [
    {"input": {"query": "北京天气?"}, "output": {"success": True}},
]

client.create_examples(
    dataset_id=dataset.id,
    inputs=[e["input"] for e in examples],
    outputs=[e["output"] for e in examples]
)

RAGAS

python
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy
from datasets import Dataset

data = {
    "question": ["什么是 RAG?"],
    "answer": ["RAG 是检索增强生成..."],
    "contexts": [["RAG 文档内容"]],
    "ground_truth": ["RAG 定义..."]
}

dataset = Dataset.from_dict(data)

result = evaluate(
    dataset=dataset,
    metrics=[faithfulness, answer_relevancy]
)

自动化评估

LLM-as-a-Judge

python
class LLMEvaluator:
    """使用 LLM 评估"""

    def __init__(self, model="gpt-4o"):
        self.model = ChatOpenAI(model=model)

    def evaluate(self, question: str, response: str) -> dict:
        prompt = f"""评估回答质量:

问题: {question}
回答: {response}

评分 1-10:准确性、完整性、清晰度、有用性

返回 JSON。"""

        result = self.model.invoke(prompt)
        return json.loads(result.content)

基于规则的评估

python
class RuleBasedEvaluator:
    """基于规则的评估"""

    def __init__(self):
        self.rules = []

    def add_rule(self, rule_func, name: str):
        self.rules.append({"name": name, "func": rule_func})

    def evaluate(self, question: str, response: str) -> dict:
        results = {}
        for rule in self.rules:
            try:
                passed, message = rule["func"](question, response)
                results[rule["name"]] = {"passed": passed, "message": message}
            except Exception as e:
                results[rule["name"]] = {"passed": False, "message": str(e)}

        passed = sum(1 for r in results.values() if r["passed"])
        results["summary"] = {"passed": passed, "total": len(self.rules)}
        return results

A/B 测试

python
from dataclasses import dataclass
from typing import Callable, List
import time

@dataclass
class TestResult:
    variant: str
    success: bool
    response_time: float
    error: str = None

class AgentABTester:
    """Agent A/B 测试"""

    def __init__(self, variant_a: Callable, variant_b: Callable):
        self.variant_a = variant_a
        self.variant_b = variant_b

    def run_test(self, test_inputs: List[Dict]) -> Dict:
        results_a = []
        results_b = []

        for i, inp in enumerate(test_inputs):
            variant = self.variant_a if i % 2 == 0 else self.variant_b
            result = self._execute(variant, inp)

            if variant == self.variant_a:
                results_a.append(result)
            else:
                results_b.append(result)

        return self._analyze(results_a, results_b)

    def _execute(self, variant: Callable, inp: Dict) -> TestResult:
        try:
            start = time.time()
            response = variant(inp)
            elapsed = time.time() - start
            return TestResult(variant.__name__, True, elapsed)
        except Exception as e:
            return TestResult(variant.__name__, False, 0, str(e))

小结

Agent 评估要点:

  1. 评估维度:准确性、相关性、完整性、一致性、有用性、效率
  2. 评估框架:LangSmith、RAGAS、Phoenix
  3. 自动化方法:LLM-as-a-Judge、规则评估
  4. A/B 测试:对比不同版本性能
  5. 持续监控:建立自动化测试流程

本系列文章到此结束,希望这些内容帮助你全面理解 LLM 和 Agent 技术!

赞赏博主
评论 隐私政策